﻿#define _CRT_SECURE_NO_WARNINGS 1


//给定 n 个数，离散化之后，输出每⼀个数离散化之后的值。
///输入
//10
//1999999
//12
//1999999
//-48444
//568
//12
//-100
//-2845630
//100000001
//263
//// 输出
//7 4 7 2 6 4 3 1 8 5

//
////离散化模板一：排序->去重->二分查找离散之后的结果
//
//#include<iostream>
//#include<algorithm>
//
//using namespace std;
//
//const int N = 1e5 + 10;
//
//int n;
//int a[N];
//
//int pos;//标记去重之后的元素个数
//int disc[N];//帮助离散化
//
////二分x的位置
//int find(int x)
//{
//	int l = 1;
//	int r = pos;
//	while (l < r)
//	{
//		int mid =  (r + l) / 2;
//		if (disc[mid] >= x)
//			r = mid;
//		else
//			l = mid + 1;
//	}
//	return l;
//}
//
//int main()
//{
//	cin >> n;
//	for (int i = 1;i <= n;++i)
//	{
//		cin >> a[i];
//		disc[++pos] = a[i];
//	}
//
//	//离散化
//	sort(disc + 1, disc + 1 + pos);//排序
//	pos = unique(disc + 1, disc + 1 + pos) - (disc + 1);//去重（两个指针相减得出去重后的元素个数）
//	
//	for (int i = 1;i <= n;++i)
//		cout << a[i] << "离散化之后：" << find(a[i]) << "\n";
//	return 0;
//}

//
//
////离散化模板二：排序->哈希表去重以及记录最终的位置
//
//#include<iostream>
//#include<algorithm>
//#include<unordered_map>
//
//using namespace std;
//
//const int N = 1e5 + 10;
//
//int n;
//int a[N];
//
//int pos;//标记去重之后的元素个数
//int disc[N];//帮助离散化
//unordered_map<int, int> id;//<原始的值，离散之后的值>
//
//int main()
//{
//	cin >> n;
//	for (int i = 1;i <= n;++i)
//	{
//		cin >> a[i];
//		disc[++pos] = a[i];
//	}
//
//	//离散化
//	sort(disc + 1, disc + 1 + pos);//排序
//	int cnt = 0;//当前这个值是第几号元素
//	for (int i = 1;i <= pos;++i)
//	{
//		int x = disc[i];
//		if (id.count(x))
//			continue;
//		++cnt;
//		id[x] = cnt;
//	}
//	for (int i = 1;i <= n;++i)
//		cout << a[i] << "离散化之后：" << id[a[i]] << "\n";
//	return 0;
//}
//


